#本文件：控制Excel文件


from openpyxl import load_workbook#安装库：pip install openpyxl
#import time_utils as myTime#在下列代码块内部再写一遍，可就找不到了哈！！！导致外部使用时失效#而且，这里的导入，会影响别处对他的调用，也就是，被调用的代码用到的东西，不能在调用者和被调用者中都导入。
#cso-兼职：批量发包
#代码设计逻辑：写入到文件，再将文件上传到web页面
#这里为了灵活，手动输入要创建的包的个数和分数（参数），然后在本函数内调用文件名生成函数。#TODO这里只能生成指定个数、指定分数的包，包名统一格式，无备注内容

def cso_part(package_nums):

    # 你的变量（示例值，实际由你的业务逻辑生成）
    argu1 = "测试值1"
    argu2 = 12345
    argu3 = True

    # Excel文件路径（替换为你的文件路径）
    file_path = "D:\\Daphne\\remoteRepository\（公司电脑）本地自动化文件模板\兼职人员专用模板.xlsx"#todo！！！

    try:
        # 加载已存在的Excel文件
        workbook = load_workbook(file_path)

        # 选择第一个工作表（也可以用工作表名称，如 workbook["Sheet1"]）
        sheet = workbook.active  # active表示当前激活的工作表

        # 写入数据（A1、B1、C1单元格）
        #这里可能需要循环写入
        sheet["A1"] = argu1  # A1单元格写入argu1
        sheet["B1"] = argu2  # B1单元格写入argu2
        sheet["C1"] = argu3  # C1单元格写入argu3



        #如何能不影响到表头？

        # 循环写入数据
        # 这里想要优化：先清除之前写入的数据（表头不能删哈！！！）
        '''这里存在对表头修改的问题，下边的代码是解决了的
        总之就是，有格式的代码，用 sheet.max_row + 1找到真正的空白行。
        问题出在 sheet.max_row 的判断上：
        很多空白模板（尤其是带表头格式的），Excel 会默认把 “有格式的行” 算作 “已占用行”（比如表头第 1 行有合并单元格、字体格式，sheet.max_row 可能返回 1，但如果模板里第 2 行也有默认格式，sheet.max_row 可能返回 2）。
        此时如果代码强行写 A2/B2，就会覆盖第 2 行的 “格式占位行”—— 而这个占位行可能和表头格式关联，
        导致看起来 “表头被修改了”。
        代码执行时：
        循环 i=0 时，强行写入 A2/B2 —— 覆盖了第 2 行的 “格式占位行”；
        因为第 2 行的格式和表头是联动的（比如表头合并了 A1:C1，第 2 行 A2:C2 默认继承了列对齐），覆盖后表头的格式关联被破坏，就会误以为 “表头被修改了”。
        for i in range(package_nums):
            print(f"写入第{i+1}个包")
            #argu1, argu2, argu3 = file_name_generator()#TODO可以尝试这种写法
            num = str(i+1)
            package_name = "amount"+ num + '-' + myTime.get_current_time_digits('second')
            #sheet.append([argu1, argu2, argu3])#TODO这个函数没用过，了解一下
            sheet["A"+str(i+2)] = package_name
            sheet["B"+str(i+2)] = 3
        '''




        # 假设其他变量已定义：myTime、file_path、package_nums等
        workbook = load_workbook(file_path)
        sheet = workbook.active  # 或指定工作表：workbook["Sheet1"]

        # 关键：找到表头下方的第一个空白行（表头在第1行，所以从第2行开始，取最大行+1确保追加）
        first_empty_row = sheet.max_row + 1  # 若表为空，max_row=1，first_empty_row=2；若已有数据，自动追加到最后一行下方

        for i in range(package_nums):
            print(f"写入第{i + 1}个包")
            num = str(i + 1)
            package_name = "amount" + num + '-' + myTime.get_current_time_digits('second')
            # 行号 = first_empty_row + i （确保每个包依次往下写，不覆盖）
            row = first_empty_row + i
            sheet[f"A{row}"] = package_name
            sheet[f"B{row}"] = 3
            # 若有argu3，继续写入C列：sheet[f"C{row}"] = argu3



        # 保存文件（覆盖原文件）
        workbook.save(file_path)
        print("数据写入成功！")

    except FileNotFoundError:
        print(f"错误：未找到文件 {file_path}")
    # except Exception as e:
    #     print(f"写入失败：{str(e)}")



if __name__ == "__main__":
    cso_part(5)